home *** CD-ROM | disk | FTP | other *** search
-
-
- /* Memory snapshot routine written in DeSmet 'C'.
- by Stan Peters, 813 Clara, Palo Alto, 94303.
-
- A debugging tool, useful for examining structures and file data.
- It is also a valuable learning aid for 'C' but requires that
- you have (or gain) dump reading ability.
- It should have good portability, as it was first written in BDS 'C'
- for a CP/M system. */
-
-
- /* test of snap */
-
- struct stype {
- char line1[16];
- char line2[16];
- char line3[16];
- char *p1;
- char *p2;
- char *p3;
- char *p4;
- } s;
-
- char ss1[9];
- char ss2[9];
- int s1;
- char ss3[9];
- int s2;
- int s3;
- char *ss;
-
- main()
- {
- for(s1 = 0; s1 <64 ;s1++)
- s.line1[s1] = 1; /* initialize snap target */
- strcpy(s.line2,"line2 string");
- snap(s,32,"snap 1");
- strcpy(s.line1,"too long line1 string");
- snap(s,64,"snap 2");
- strcpy (s.line3,s.line1);
- s.p1 = s.line1;
- s.p2 = &s.line1;
- s.p3 = &s.p1; /* pointer to string pointer */
- s.p4 = *s.p1; /* illogical, char to ptr */
- snap(s,72,"snap 3");
-
- strcpy(ss1,"1 string");
- strcpy(ss2,"2 string");
- strcpy(ss3,"3 string");
- s1 = 1; s2 = 2; s3 = 3;
- ss = &ss1;
- snap(s,64,"snap 4");
- }
-
- /* routine displays memory as hex and characters */
-
- char stst[80]; /* build space for snap line */
-
- snap(ptr,len,label)
- char *ptr; /* start of area to be snapped */
- int len; /* length */
- char *label;
- {
- char c;
- int g, h, i, j, k, l, pl;
- pl = ptr + len -1;
- printf("\n%s", label);
- for ( l = 0; l < len; l += 16)
- {
- for (g = 4; g < 80; g++)
- stst[g] = ' '; /* clear line */
- sprintf(stst,"\n%04x ",ptr); /* address of data */
- i = 0; j = 7; k = 51;
- for ( g=0; g<4; g++)
- {
- for ( h=0; h < 4 && pl >= ptr; h++)
- {
- c = *ptr++;
- stst[j++] = makeasci(( c >> 4) & 0xf); /* left nibble */
- stst[j++] = makeasci( c & 0xf); /* right nibble */
- if (( c < ' ') || (c > 0x7e)) /* now character representation */
- c = '.'; /* . if unprintable */
- stst[k++] = c; /* print it */
- }
- j += 2; /* space after every four */
- /* k++; insert this to space rt side chars */
- }
- stst[78] = 0;
- puts(stst);
- }
- }
-
- char makeasci(c)
- short c;
- {
- return (( c > 9 ) ? c + 'A' - 10 : c + '0');
- }